%% part 1

divide([], [], []).
divide([Lh|Lt], [Lh|Half1], Half2) :- divide(Lt, Half2, Half1).

% разделить на три списка
divide3([], [], [], []).
divide3([Lh|Lt], [Lh|Half3], Half1, Half2) :- divide3(Lt, Half1, Half2, Half3).

%% part 2

% variant 1
cut(Xh, [Xh|Xt], Xt).
cut(Xh, [Yh|Yt], [Yh|Zt]) :- cut(Xh, Yt, Zt).

anagram([], []).
anagram([Lh|Lt], A) :- anagram(Lt, NewA), cut(Lh, A, NewA).

% variant 2
% пропускать повторяющиеся комбинации (не завершено)
anagram2([], []).
anagram2([Lh|Lt], A) :- (
							isNextDuplication(Lt, Lh)
						->
							% пропустить повторения букв
						;	
							anagram2(Lt, NewA),
							cut(Lh, A, NewA)
						).
isNextDuplication([Lh|_], Lh).






